// 从extension.ts提取的函数解析逻辑

// 提取函数声明
export function extractFunctions(sourceCode) {
    const functionRegex = /\b([a-zA-Z_][a-zA-Z0-9_]*)\s*\([^)]*\)\s*\{/g;
    const functions = [];
    
    // 排除列表，包含C/C++的关键字和控制结构
    const excludeList = [
        'if', 'else', 'for', 'while', 'do', 'switch', 'case', 'return',
        'break', 'continue', 'goto', 'sizeof', 'typedef', 'struct', 
        'union', 'enum', 'static', 'extern', 'auto', 'register', 
        'const', 'volatile', 'inline', 'restrict', 'asm', 'typeof'
    ];
    
    let match;
    // 循环遍历所有匹配到的函数定义
    while ((match = functionRegex.exec(sourceCode)) !== null) {
        const funcName = match[1];
        // 确保提取的名称不是C/C++关键字
        if (!excludeList.includes(funcName)) {
            functions.push(funcName);
        }
    }

    return functions;
}

// 提取类名
export function extractClassName(sourceCode) {
    // 匹配类定义
    const classRegex = /class\s+([a-zA-Z_][a-zA-Z0-9_]*)\s*\{/g;
    let match;
    
    // 先查找普通类定义
    if ((match = classRegex.exec(sourceCode)) !== null) {
        return match[1];
    }
    
    // 查找结构体定义
    const structRegex = /struct\s+([a-zA-Z_][a-zA-Z0-9_]*)\s*\{/g;
    if ((match = structRegex.exec(sourceCode)) !== null) {
        return match[1];
    }
    
    // 查找枚举定义
    const enumRegex = /enum\s+([a-zA-Z_][a-zA-Z0-9_]*)\s*\{/g;
    if ((match = enumRegex.exec(sourceCode)) !== null) {
        return match[1];
    }
    
    return null;
}